100 REM* A SHOW OF HANDS * 110 REM* AN SIGN LANGUAGE ALPHABET LEARNING PROGRAM * 120 REM* BY JACK R. FARRAH 11/87 * 130 POKE55,255:POKE56,116:REM LOWER TOP OF BASIC MEMORY BELOW ML AND PIC FILE 140 PRINT"[147]"SPC(10)"LOADING PICTURE FILE" 150 IF A=0 THEN A=1:LOAD"PICTURE FILE",8,1 160 CLR:REM SET TOP OF STRING VARIABLES TO TOP OF BASIC 170 PRINT"[147]"SPC(9)"INSTALLING ML ROUTINES" 180 ML=29952:REM START ADDRESS OF ML ROUTINES 190 FOR X=1 TO 412 200 READ A:SUM=SUM+A:NEXT 210 IF SUM<>54225 THEN PRINT "CHECKSUM ERROR!":STOP 220 RESTORE 230 FOR X=1 TO 412 240 READ A:POKE ML,A:ML=ML+1:NEXT 250 DIM A(25):REM 26 ELEMENT ALPHABET ARRAY 260 PRINT"[147]"SPC(12)"A SHOW OF HANDS":PRINT 270 PRINTSPC(6)"THE AMERICAN MANUAL ALPHABET":PRINT:PRINT 280 PRINTSPC(11)"(1) SIGNS TEST":PRINT 290 PRINTSPC(11)"(2) TEXT TO SIGNS":PRINT 300 PRINTSPC(11)"(3) QUIT PROGRAM":PRINT 310 PRINTSPC(12):INPUT"SELECT(1-3)";A$ 320 IF A$="1"THEN 360 330 IF A$="2"THEN 940 340 IF A$="3"THEN END 350 GOTO 310 360 REM *SIGNS TEST ROUTINE* 370 PRINT"[147]"SPC(15)"SIGNS TEST":PRINT 380 PRINTSPC(7)"(1) TIME LIMIT PER LETTER":PRINT 390 PRINTSPC(7)"(2) NO TIME LIMIT":PRINT 400 PRINTSPC(7)"(3) RETURN TO MAIN MENU":PRINT 410 TFLAG=0:REM FLAG TO SHOW IF TIMING REQUIRED 420 PRINTSPC(12):INPUT"SELECT(1-3)";A$ 430 IF A$="1"THEN 460 440 IF A$="2"THEN 520 450 IF A$="3"THEN 260 460 REM* TIME LIMIT TEST * 470 PRINT:PRINTSPC(10)"1=FASTEST 9=SLOWEST" 480 PRINTSPC(10):INPUT"SELECT SPEED(1-9) ";A$ 490 A=10*(VAL(A$)):D=A:IF A$<"1" OR A$>"9" THEN 480 500 TFLAG=1:REM SHOW TIME LOOP REQUIRED 510 REM*NO TIME LIMIT ROUTINE STARTS* 520 REM*FILL ARRAY WITH ASCII CODES FOR LETTERS* 530 L=65 540 FOR X=0 TO 25 550 A(X)=L 560 L=L+1 570 NEXT 580 SYS 30079:REM CLEAR BIT MAP 590 SYS 29952:REM SWITCH IN RASTER INTERRUPT 600 N=RND(-TI):REM SET UP FOR NEW RANDOM SEQUENCE 610 N=RND(1)*(25-0)+0:REM RANDOM # FROM 0 TO 25 620 IF A(N)=0 THEN PRINT:PRINT"WAIT...":GOTO 830 630 B=A(N):C=N:POKE780,B:REM SAVE # IN B AND ARRAY ELEMENT IN C 640 SYS 30128:REM DISPLAY SIGN 650 PRINT"[147]":POKE214,21:PRINT"PRESS KEY OF SIGN'S LETTER." 660 GET A$ 670 IF A$=""AND TFLAG=1 THEN 760:REM DO TIMING LOOP IF FLAG SET 680 IF A$=""GOTO 660 690 IF A$=CHR$(B) THEN PRINT:PRINT"CORRECT!":A(C)=0:A=D:WAIT203,64:GOTO 710 700 PRINT:PRINT"SORRY. THIS SIGN IS FOR THE LETTER "CHR$(B)"[146]":A=D 710 PRINT"HIT C TO CONTINUE, M FOR MENU":WAIT203,64 720 GET A$:IF A$="" THEN 720 730 IF A$="C" THEN 610 740 IF A$="M" THEN SYS 30272:GOTO 360:REM RESET TO NORMAL INTERRUPT 750 GOTO 720 760 REM*TIMING LOOP* 770 FOR Y=1 TO 25:NEXT Y 780 A=A-1 790 IF A>0 THEN 660 800 IF A=0 THEN PRINT"TIME EXPIRED!" 810 PRINT"THIS SIGN IS FOR THE LETTER "CHR$(B)"[146]":A=D:REM RESET DELAY VALUE 820 GOTO 710 830 REM* ARRAY ELEMENT FOUND TO BE 0* 840 REM*CHECK IF ALL ELEMENTS USED* 850 X=0 860 E=A(X) 870 IF E<>0 THEN N=X:GOTO 630:REM TAKE NEXT NON-ZERO ELEMENT 880 X=X+1:IF X=26 THEN 900 890 GOTO 860 900 PRINT"EXCELLENT! YOU HAVE COMPLETED THE"SPC(7)"ALPHABET OF SIGNS." 910 PRINT"HIT ANY KEY TO RETURN TO MENU." 920 GET A$:IF A$="" THEN 920 930 A$="M":GOTO 740 940 REM*TEXT TO SIGNS ROUTINE* 950 PRINT"[147]"SPC(13)"TEXT TO SIGNS":PRINT:PRINT 960 PRINTSPC(3)"(1) SHOW LETTERS AS ENTERED":PRINT 970 PRINTSPC(3)"(2) ENTER TEXT STRING FOR DISPLAY":PRINT 980 PRINTSPC(3)"(3) RETURN TO MAIN MENU":PRINT 990 PRINTSPC(12):INPUT"SELECT (1-3) ";A$ 1000 IF A$="1" THEN PRINT:POKE214,21:PRINT:SYS 30079:SYS 29952:GOTO 1040 1010 IF A$="2" THEN 1120 1020 IF A$="3" THEN 260 1030 GOTO 990 1040 REM*SHOW LETTERS AS ENTERED ROUTINE* 1050 PRINT:PRINT"ENTER LETTERS A-Z." 1060 PRINT"ANY OTHER KEYS RETURN TO MENU." 1070 GET A$:IF A$="" THEN 1070 1080 IF A$<"A" OR A$>"Z" THEN SYS 30272:GOTO 950 1090 B=ASC(A$):PRINT A$ 1100 POKE780,B:SYS 30128:REM DISPLAY SIGN 1110 GOTO 1070 1120 REM*ENTER TEXT STRING ROUTINE* 1130 PRINT"[147]"SPC(9)"DISPLAY TEXT STRINGS":PRINT 1140 PRINTSPC(4)"MAXIMUM LENGTH OF TEXT STRING IS" 1150 PRINTSPC(12)"255 CHARACTERS.":PRINT 1160 PRINT"ONLY LETTERS (A-Z) AND SPACES RECOGNIZED" 1170 PRINTSPC(6)"DISPLAY TIME PER CHARACTER " 1180 PRINTSPC(5)"CAN BE VARIED FOR PRACTICING." 1190 PRINT:PRINTSPC(13)"1=FAST 9=SLOW" 1200 PRINT:PRINTSPC(10):INPUT"SELECT SPEED (1-9) ";A$ 1210 IF VAL(A$)<1 OR VAL(A$)>9 THEN 1200 1220 B=VAL(A$) 1230 PRINT:POKE214,21:PRINT:SYS 30079:SYS 29952 1240 PRINT"ENTER TEXT STRING." 1250 GOSUB 1550 1260 PRINT:C=LEN(A$) 1270 IF C>0 THEN 1330 1280 PRINT"HIT C TO CONTINUE, M TO RETURN TO MENU" 1290 GET A$:IF A$="" THEN 1290 1300 IF A$<>"C" OR A$<>"M" THEN 1280 1310 IF A$="M" THEN SYS 30272:GOTO 950 1320 GOTO 1240 1330 FOR X=1 TO C 1340 D$=MID$(A$,X,1) 1350 D=ASC(D$) 1360 IF D=32 THEN PRINT" ";:GOTO 1410:REM IGNORE SPACE BUT PRINT IT 1370 IF D<65 OR D>90 THEN PRINT"?";:GOTO 1410 1380 POKE780,D:SYS 30128:REM DISPLAY SIGN 1390 PRINT D$; 1400 GOSUB 1490:REM DO TIMING LOOP 1410 NEXT X 1420 REM*STRING HAS NOW BEEN DISPLAYED* 1430 PRINT:PRINTSPC(5)"HIT C TO ENTER ANOTHER STRING" 1440 PRINTSPC(10)"M TO RETURN TO MENU" 1450 GET A$:IF A$="" THEN 1450 1460 IF A$<>"C" AND A$<>"M" THEN 1430 1470 IF A$="C" THEN 1240 1480 SYS 30272:GOTO 950 1490 REM*TIMING SUBROUTINE B=TIMING VALUE* 1500 FOR Y=1 TO B 1510 FOR Z=1 TO 100:NEXT Z 1520 NEXT Y 1530 RETURN 1540 REM* INPUT TEXT STRING ROUTINE * 1550 Y=0:A$="" 1560 GET B$ 1570 POKE204,0:REM BLINK CURSOR 1580 IF B$="" THEN 1560 1590 IF B$=CHR$(13) THEN POKE204,1:RETURN 1600 IF B$=CHR$(20) AND Y>1 THEN A$=MID$(A$,1,Y-1):PRINT B$;:Y=Y-1:GOTO 1560 1610 IF B$=CHR$(20) AND Y=0 THEN GOTO 1560 1620 PRINT B$;:A$=A$+B$:Y=Y+1 1630 IF Y=255 THEN POKE 204,0:PRINT:PRINT"MAX STRING LENGTH!":PRINT:RETURN 1640 GOTO 1560 1650 REM* DATA FOR ML ROUTINES * 1660 DATA 120,169,127,141,13,220,169,1 1670 DATA 141,26,208,169,217,141,18,208 1680 DATA 169,24,141,17,208,169,0,141 1690 DATA 173,117,173,0,221,141,174,117 1700 DATA 173,24,208,141,175,117,169,50 1710 DATA 141,20,3,169,117,141,21,3 1720 DATA 88,96,169,15,141,25,208,173 1730 DATA 173,117,240,34,173,17,208,9 1740 DATA 32,141,17,208,169,217,141,18 1750 DATA 208,173,0,221,41,252,141,0 1760 DATA 221,169,8,141,24,208,169,0 1770 DATA 141,173,117,76,49,234,169,27 1780 DATA 141,17,208,173,175,117,141,24 1790 DATA 208,173,174,117,141,0,221,169 1800 DATA 49,141,18,208,169,1,141,173 1810 DATA 117,104,168,104,170,104,64,162 1820 DATA 0,169,1,157,0,192,157,250 1830 DATA 192,157,244,193,157,238,194,232 1840 DATA 224,250,208,239,169,0,133,251 1850 DATA 169,224,133,252,169,0,168,145 1860 DATA 251,200,208,251,230,252,166,252 1870 DATA 224,255,208,243,96,0,0,0 1880 DATA 233,65,10,170,189,104,118,133 1890 DATA 251,189,105,118,133,252,169,228 1900 DATA 133,254,169,40,133,253,169,0 1910 DATA 141,61,118,141,60,118,168,170 1920 DATA 140,61,118,172,60,118,177,251 1930 DATA 201,254,240,16,200,32,22,118 1940 DATA 140,60,118,172,61,118,32,29 1950 DATA 118,76,208,117,200,32,22,118 1960 DATA 177,251,141,62,118,200,32,22 1970 DATA 118,177,251,141,63,118,200,32 1980 DATA 22,118,140,60,118,172,61,118 1990 DATA 173,62,118,32,29,118,206,63 2000 DATA 118,208,245,76,208,117,192,0 2010 DATA 208,2,230,252,96,145,253,200 2020 DATA 192,112,208,20,160,0,232,224 2030 DATA 16,240,14,169,64,24,101,253 2040 DATA 133,253,144,2,230,254,230,254 2050 DATA 96,104,104,96,0,0,0,0 2060 DATA 120,169,129,141,13,220,169,0 2070 DATA 141,26,208,169,155,141,17,208 2080 DATA 173,174,117,141,0,221,173,175 2090 DATA 117,141,24,208,169,49,141,20 2100 DATA 3,169,234,141,21,3,88,96 2110 DATA 174,119,11,121,144,122,253,123 2120 DATA 168,125,252,126,158,128,6,130 2130 DATA 63,131,179,132,93,135,234,136 2140 DATA 133,138,2,140,132,141,20,143 2150 DATA 197,144,81,146,204,147,243,148 2160 DATA 58,150,202,151,130,153,75,155 2170 DATA 202,156,70,158